package com.jyw.common.core.domain;

import com.jyw.common.constant.HttpStatus;
import com.jyw.common.core.domain.model.CacheVersion;
import com.jyw.common.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Objects;

/**
 * 操作消息提醒
 * 
 * @author system
 */
@Data
@ApiModel("通用返回实体")
public class CommonResult<T>
{
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("状态码")
    private int code;

    @ApiModelProperty("返回内容")
    private String msg;

    @ApiModelProperty("数据对象")
    private T data;

    @ApiModelProperty("缓存版本")
    private CacheVersion version;


    /**
     * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
     */
    public CommonResult()
    {
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     */
    public CommonResult(int code, String msg)
    {
        setCode(code);
        setMsg(msg);
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     * @param data 数据对象
     */
    public CommonResult(int code, String msg, T data)
    {
        setCode(code);
        setMsg(msg);
        if (StringUtils.isNotNull(data))
        {
            setData(data);
        }
    }

    /**
     * 返回成功消息
     * 
     * @return 成功消息
     */
    public static CommonResult success()
    {
        return CommonResult.success("操作成功");
    }

    /**
     * 返回成功数据
     * 
     * @return 成功消息
     */
    public static CommonResult success(Object data)
    {
        return CommonResult.success("操作成功", data);
    }

    /**
     * 返回成功消息
     * 
     * @param msg 返回内容
     * @return 成功消息
     */
    public static CommonResult success(String msg)
    {
        return CommonResult.success(msg, null);
    }

    /**
     * 返回成功消息
     * 
     * @param msg 返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static CommonResult success(String msg, Object data)
    {
        return new CommonResult(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static CommonResult warn(String msg)
    {
        return CommonResult.warn(msg, null);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static CommonResult warn(String msg, Object data)
    {
        return new CommonResult(HttpStatus.WARN, msg, data);
    }

    /**
     * 返回错误消息
     * 
     * @return 错误消息
     */
    public static CommonResult error()
    {
        return CommonResult.error("操作失败");
    }

    /**
     * 返回错误消息
     * 
     * @param msg 返回内容
     * @return 错误消息
     */
    public static CommonResult error(String msg)
    {
        return CommonResult.error(msg, null);
    }

    /**
     * 返回错误消息
     * 
     * @param msg 返回内容
     * @param data 数据对象
     * @return 错误消息
     */
    public static CommonResult error(String msg, Object data)
    {
        return new CommonResult(HttpStatus.ERROR, msg, data);
    }

    /**
     * 返回错误消息
     * 
     * @param code 状态码
     * @param msg 返回内容
     * @return 错误消息
     */
    public static CommonResult error(int code, String msg)
    {
        return new CommonResult(code, msg, null);
    }

//    /**
//     * 是否为成功消息
//     *
//     * @return 结果
//     */
//    public boolean isSuccess()
//    {
//        return Objects.equals(HttpStatus.SUCCESS, getCode());
//    }
//
//    /**
//     * 是否为警告消息
//     *
//     * @return 结果
//     */
//    public boolean isWarn()
//    {
//        return Objects.equals(HttpStatus.WARN, getCode());
//    }
//
//    /**
//     * 是否为错误消息
//     *
//     * @return 结果
//     */
//    public boolean isError()
//    {
//        return Objects.equals(HttpStatus.ERROR, getCode());
//    }
}
